package cn.xeblog.plugin.action.handler.command;

import cn.xeblog.plugin.action.AliveAction;
import cn.xeblog.plugin.action.ConsoleAction;
import cn.xeblog.plugin.annotation.DoCommand;
import cn.xeblog.plugin.enums.Command;

import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;

/**
 * 防沉迷命令处理器
 * <p>
 * 该命令用于防止程序猿因过度使用 IDEA，而产生的疲劳、困倦，进而导致猝死等一系列危及生命安全问题的出现
 * </p>
 *
 * @author anlingyi
 * @date 2021/9/4 8:16 下午
 */
@DoCommand(Command.ALIVE)
public class AliveCommandHandler extends AbstractCommandHandler {

  @Override
  public void process(String[] args) {
    if (args.length < 1) {
      ConsoleAction.showSimpleMsg("[活着]当前状态：" + (AliveAction.isEnabled() ? "已开启" : "已关闭"));
    } else {
      // 是否开启
      boolean enabled = Integer.parseInt(args[0]) > 0;
      // 开启并打印提示
      AliveAction.setEnabled(enabled);
      ConsoleAction.showSimpleMsg("[活着]" + (enabled ? "已开启！" : "已关闭！"));
    }

    // 当开启时,打印下一次提醒时间
    if (AliveAction.isEnabled()) {
      boolean flushed = AliveAction.flushNextStartTime();
      ConsoleAction.showSimpleMsg("下一次提醒时间：" + getNextStartTime() + (flushed ? " (已更新)" : ""));
    }
  }

  /**
   * 格式化下一次存活的时间
   *
   * @return 时间字符串
   */
  private static String getNextStartTime() {
    return DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss")
        .format(LocalDateTime.ofInstant(Instant.ofEpochSecond(AliveAction.getNextStartTime()), ZoneId.systemDefault()));
  }

  @Override
  protected boolean check(String[] args) {
    return true;
  }

}
